GUET-CTF2019 number_game
[GUET-CTF2019]number_game
ida64打开
分析main函数可知,输入经过两次加密后进入到验证环节
decode1
decode2
可以看出decode1和decode2都是二叉树
decode1是递归实现的建树的过程,decode2是中序遍历
看完加密,再去看验证函数
两层0-4的循环,加上[&flag + 5 * i + j]猜测只是个5*5的数组
进一步分析flag数组里面的内容
最后得出这是个5*5的数独,两个==的判断一个是横着的一排无重复,另一个是竖着的一列无重复,然后将这个数独完成后得出加密后的flag就是0421421430
再逆推最开始的输入
既然加密只改变输入的顺序,直接动态调试
修改汇编让check函数失效,输入0123456789
可以看出0123456789已经变成了7381940526
再将0421421430按照对应关系回填
1 | flag{1134240024} |